#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/types.h> 
#include <sys/wait.h>
#include <signal.h>
#define sighandler_t __sighandler_t
#include <pthread.h>
#include <unistd.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#include <stdbool.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <fcntl.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/epoll.h>


#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

#define ARG_CHECK(args, n) do{    \
    if (args != n) {            \
        fprintf(stderr, "Error: expectation %d argument.\n", n); \
        exit(1);                \
    }                           \
} while (0)                               

#define ERROR_CHECK(return_value, n, message) do{ \
    if (return_value == n) {        \
        perror(message);            \
        exit(1);                    \
    }                               \
} while (0)                                   

#define THREAD_ERROR_CHECK(return_value, message) do{   \
    if (return_value) {     \
        perror(message);    \
        exit(1);            \
    }                       \
} while (0)
